// m

// 给定一个链表，按顺序每两个节点交换以下，并返回交换后的链表，要求需要实际进行节点交换，而不是只改变节点内部的值

// 解题思路
// 1. 遍历链表，并判断当前链表后两位节点是否为空，如果节点不为空，则使用三个指针：curr指向当前节点，node1指向下一个节点，node2指向下面的第二个节点
// 2. 将curr指向node2，node1指向node2后边的节点，node2指向node1，则节点关系由curr-node1-node2变为了curr-node2-node1
// 依次类推，最终返回头节点
// 我们在一开始的时候新建一个节点new_head,作为新的头节点加到链表头部，最终返回结果的时候，直接返回new_head.next即可
const { ListNode, LinkedList } = require('../../../2. 链表/1. 链表基础/1. 建立线性链表')
function swapPairs(head) {
    let new_head = new ListNode(0)
    new_head.next = head
    let curr = new_head
    let node1
    let node2
    while (curr.next && curr.next.next) {
        node1 = curr.next
        node2 = curr.next.next
        curr.next = node2
        node1.next = node2.next
        node2.next = node1
        curr = node1
    }
    return new_head.next
}
let head = [1,2,3,4]
const list = new LinkedList(head)
console.log(swapPairs(list.head))